package spring.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import spring.domain.Operand;
import spring.model.service.CalculatorService;

/*
 * MultiActiocController 구현
 *  1. MultiActionController 상속
 *  2. controller 메소드들을 구현
 *  	return type :
 *  				ModelAndView를 쓸때는? Model and View 정보 둘다 리턴해야 할때
 *  				String을 쓸때는? View 정보만 리턴 할때
 *  				Map을 쓸때는? Model 만 return 할때(View - 요청한 URL)
 *  				void를 쓸때는? Model이 없고 View는 요청 url을 사용할때
 */


public class CalculatorController extends MultiActionController{
	private CalculatorService service;
	public CalculatorController(CalculatorService service){
		this.service = service;
	}
	public ModelAndView plus(HttpServletRequest request, HttpServletResponse response){
		//이제 컨트롤러 로직이 들어가야 한다.
		/*
		 * 1. 요청 파라미터 조회
		 * 2. 비즈니스 로직 호출(Model 호출)
		 * 3. 응답 처리(View 호출)
		 */
		
		
		String operand1 = request.getParameter("operand1");
		String operand2 = request.getParameter("operand2");
		
		ModelAndView mv = null;
		try{
			//1
			int op1 = Integer.parseInt(operand1);
			int op2 = Integer.parseInt(operand2);
			//2
			int result = service.plus(op1, op2);
			//3
			//매개변수 1. 뷰이름, 2. Attribute Name, 3.Attribute(request scope)
			mv = new ModelAndView("/result.jsp","result",result);
		}catch(NumberFormatException ne){
			mv = new ModelAndView("/error.jsp","message","오류발생");
		}
		return mv;
	}
	
	//위 방법과 비교해서 뭐가 어떻게 편해졌는지 잘 공부하자. 
	public ModelAndView minus(HttpServletRequest request, HttpServletResponse response, Operand op){
		int result = service.minus(op);
		return new ModelAndView("/result.jsp","result",result);
		
	}
	
}
